package com.ruoyi.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.*;
import com.ruoyi.system.entity.MsgPushTaskDO;

import java.util.List;

import com.ruoyi.system.vo.*;

/**
 * 消息推送与收件箱服务接口
 * 提供统一推送、列表/详情查询、H5确认、签署、已读标记等核心能力
 * 支持多种消息类型的统一处理和H5端的消息管理
 */
public interface MsgPushService extends IService<MsgPushTaskDO> {

    /**
     * 保存草稿
     */
    boolean saveDraft(UnifiedPushDTO pushDTO);
    /**
     * 分页查询推送任务（包含接收明细）
     */
    IPage<MsgPushTaskWithDetailsVO> pageTasksWithDetails(MsgPushTaskQueryDTO queryDTO);

    /**
     * 查询任务详情（含接收者明细）
     */
    MsgPushTaskDetailVO getTaskDetail(Long taskId);

    /**
     * H5未读数统计
     */
    int getUnreadCount(H5MsgUnreadCountDTO unreadCountDTO);

    /**
     * H5收件箱列表
     */
    List<H5MsgListItemVO> getMessageList(H5MsgQueryDTO queryDTO);

    /**
     * H5标记已读
     */
    boolean markMessageRead(Long itemId);

    /**
     * 统一确认：根据消息类型分发（合同签署/施工验收等）
     */
    H5MsgConfirmVO confirmMessage(H5MsgConfirmDTO confirmDTO);

    /**
     * 后台统一推送：根据模板类型组装并推送消息
     */
    boolean unifiedPush(UnifiedPushDTO pushDTO);

    /**
     * 获取单条消息子项详情（含渲染内容、变量等）
     */
    H5MsgDetailVO getMessageItemDetail(Long itemId);

    /**
     * 立即推送消息
     * 接收消息ID，校验状态，修改状态为已推送
     */
    boolean sendNow(Long taskId, String operator);

    /**
     * 重推消息
     * 接收原消息ID，复制一条新消息并直接推送
     */
    Long resendMessage(Long originalTaskId, String operator);

    /**
     * 取消消息
     * 接收消息ID，修改消息状态为取消
     */
    boolean cancelTask(Long taskId, String operator);

}
